package library

import (
	"crypto/md5"
	"encoding/json"
	"fmt"
	"os"
	"regexp"
	"strings"

	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/os/glog"
)

func InitLog() {
	glog.SetDefaultLogger(g.Log())
	glog.SetDebug(false)
	glog.SetStack(false)
	glog.SetFlags(glog.F_TIME_STD | glog.F_FILE_SHORT)
}

// GetCurProjectDir 获取当前项目路径, 不包含最后的 "/"
func GetCurProjectDir() string {
	return GetProjectDir("collect-log")
}

// GetProjectDir 获取项目路径, 不包含最后的 "/"
func GetProjectDir(projectName string) string {
	projectDir, _ := os.Getwd()
	splitIndex := strings.LastIndex(projectDir, projectName)
	return projectDir[:splitIndex+len(projectName)]
}

// GetMd5Str 获取 md5
func GetMd5Str(str string) string {
	return fmt.Sprintf("%x", md5.Sum([]byte(str)))
}

// ReadJsonFile 读 json 文件, 同时会去掉注释
func ReadJsonFile(filename string) ([]byte, error) {
	b, err := os.ReadFile(filename)
	if err != nil {
		return nil, err
	}

	// 将注释 (// xxx) 处理掉
	re, _ := regexp.Compile(`// .*`)
	return re.ReplaceAll(b, []byte("")), nil
}

// UnmarshalFormFile 读 json 文件
// 注: 支持去掉 json 中的注释
func UnmarshalFormFile(filename string, data interface{}) error {
	b, err := ReadJsonFile(filename)
	if err != nil {
		return err
	}
	return json.Unmarshal(b, &data)
}
